package diershierti;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

/*
需求：编写客户端和服务器端程序，客户端用于上传图片，服务器端用于接收文件，文件上传
成功后，给客户端一个反馈：文件上传成功。
注意：
服务器端采用多线程实现，并且要解决文件名冲突问题。
客户端控制台内容：
 */
//客户端
public class Demo {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        Socket socket;
        String next = null;
        BufferedInputStream bis = null;
        OutputStream outputStream = null;
        while (true) {
            System.out.println("请输入上传路径");
            next = sc.next();
            if ("C:\\Users\\TZY\\Desktop\\新建文件夹 (2)\\2020-09-01_154254.png".equals(next)) {
                //创建一个ip和端号
                socket = new Socket("127.0.0.1", 10086);
                //把准备发送的数据以字节的形式(图片)读取到内存中
                bis = new BufferedInputStream(new FileInputStream(next));
                //准备给服务端发消息(传文件)
                outputStream = socket.getOutputStream();//C:\Users\TZY\Desktop\新建文件夹 (2)\2020-09-01_154254.png
                //把outputStream包装一下 提高传输效率(BufferedOutputStream)
                BufferedOutputStream bos = new BufferedOutputStream(outputStream);
                int a;
                while ((a = bis.read()) != -1) {
                    bos.write(a);
                }
                //传输完毕 告诉一下服务器,结束标记
                socket.shutdownOutput();
                break;
            } else {
                System.out.println("请输入正确的图片文件路径,请输入");
            }
        }

        InputStream inputStream = socket.getInputStream();
        byte[] bys = new byte[1024];
        int len = inputStream.read(bys);
        System.out.println(new String(bys, 0, len));
        socket.close();
        bis.close();
        outputStream.close();

    }
}
/*
创建一个ip和端号
把准备发送的数据以字节的形式(图片)读取到内存中
准备给服务端发消息(传文件)
把outputStream包装一下 提高传输效率(BufferedOutputStream)
把bis循环读取到bos中
通过网络写到服务器中
传输完毕 告诉一下服务器,结束标记
 //接收数据                            //转换流  把从网络中接收到的字节流转换为字符流
 不知道有多少数据 就循环读取
 */